import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.Arrays;


/**
 * Created with IntelliJ IDEA.
 * Description：
 * User：user
 * DATE:2021-10-31
 * Time:10:56
 */


public class TestDemo  {



    public static void main27(String[] args) {
        //StringBuilder StringBuffer
        StringBuilder sb = new StringBuilder("abcde");
        sb.append("123");
        StringBuffer sb3 = new StringBuffer();//synchronized  维护线程安全的 线程锁，多线程情况下进行使用
        sb3.append("456");//频繁的加锁解锁会造成空间浪费
    }

    public static void main26(String[] args) {
        StringBuilder sb = new StringBuilder("abcde");
        StringBuilder sb2 = sb.reverse();//逆转字符串
        System.out.println(sb2);
    }

    public static void main25(String[] args) {
        String str1 = "heloo";
        StringBuilder sb = new StringBuilder();
        sb.append("hello");
        for (int i = 0; i < 10; i++) {
            sb.append(i);//不建议这样拼接因为没拼接一次会产生一个对象  会产生10个builder对象
        }
        System.out.println(sb);
    }


    public static void main24(String[] args) {
        String str1 = "heloo";
        for (int i = 0; i < 10; i++) {
            str1 += i;//不建议这样拼接因为没拼接一次会产生一个对象  会产生10个builder对象
        }
        System.out.println(str1);
    }

    public static void main23(String[] args) {
        StringBuilder sb = new StringBuilder("abcd");
        sb.append(1).append("deed");
        System.out.println(sb);
    }

    public static void main22(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("hello");
        sb.append("world");//多次拼接还是只有一个对象，返回的还是当前对象
        sb.append("hello").append("world");

    }

    public static void main21(String[] args) {
        String str = "hello";//string底层的拼接会被优化为StringBuilder
        StringBuilder sb = new StringBuilder();
        sb.append("hello");
        sb.append("world");
        String str2  = sb.toString();//类型不同需要调用toString方法转为String
        System.out.println(str2);
        System.out.println(sb);
    }

    public static void main20(String[] args) {
        //String是不可以改变的，若要想要使用可以使用StringBuilder StringBuffer
        String str = "hello";
        String str1 = str + "world";
        System.out.println(str1);
    }

    public static void func(String s){
        if(s == null){
            System.out.println("字符串为空串");
            return;
        }
        if(s.length() == 0){
            System.out.println("字符串的长度");
            return;
        }
    }

    public static void main19(String[] args) {
        String str = null;//空字符串
        String str2 = "";//字符串的长度为0
        func(str);
        func(str2);
    }

    public static void main18(String[] args) {
        String str1 = " aHdbd";
        System.out.println(str1.concat("hang"));//链接一个字符串
    }

    public static void main17(String[] args) {
        String str1 = " aHdbd eee df  ";
        System.out.println(str1.toUpperCase());//转化大写
        System.out.println(str1.toLowerCase());//转化小写
    }

    public static void main16(String[] args) {
        String str1 = " abdbd eee df  ";//去除左右两边的空格
        System.out.println(str1);
        System.out.println(str1.trim());
    }

    public static void main15(String[] args) {
        String str1 = "abdbdeeedf";
        String str2 = str1.substring(2);//截取2号位置后面的所有元素
        String str3 = str1.substring(2,5);//截取2号位置到5号位置
        System.out.println(str2);
        System.out.println(str3);
    }

    public static void main14(String[] args) {
        String str = "name=zhangsan&age=18" ;
        String[] ss1 = str.split("&");//第一次分割
        /*for (String sx : ss1) {
            System.out.println(sx);
        }*/

        for (String sx : ss1) {
            String[] ss2 = sx.split("=");//二次分割
            for (String sx2 :ss2){
                System.out.println(sx2);
            }
        }
    }

    public static void main13(String[] args) {
        String str1 = "java30 12&21#hello";
        String[] strings = str1.split(" |&|#");
        //String[] strings = str1.split([ &#]);//和上述操作一致
        for (String str : strings) {
            System.out.println(str);
        }
    }

    public static void main12(String[] args) {
        String str1 = "192.168.1.1";
        //String[] strings = str1.split(".");这种无法实现拆分的，因为是高级拆分，需要使用转义字符
        String[] strings = str1.split("\\.");
        for (String str : strings) {
            System.out.println(str);
        }
    }

    public static void main11(String[] args) {
        String str1 = "abc abc abc abdeff";
        String[] strings = str1.split(" ",2);//限制拆分出来的大小
        System.out.println(Arrays.toString(strings));
    }

    public static void main10(String[] args) {
        String str1 = "abc abc abc abdeff";
        String[] strings = str1.split(" ");//将字符串以空格进行拆分,空格是不进行保留的
        System.out.println(Arrays.toString(strings));
        for (String str:strings) {
            System.out.println(str);
        }
    }

    public static void main9(String[] args) {
        String str = "abc abc abc abdeff";
        String str2 = str.replace('a','b');//将字符串中的a字符全部用k替换
        String str3 = str.replace("ab","ppp");
        String str4 = str.replaceAll("ab","ppp");//相当于上一行
        String str5 = str.replaceFirst("ab","ppp");//将从头到尾第一次出现的ab替换为ppp
        System.out.println(str2);
        System.out.println(str3);
        System.out.println(str4);
    }

    public static int strlen(String s){
        int index = s.lastIndexOf(" ");
        return s.length() - (index + 1);
    }

    public static void main8(String[] args) {
        String str = "abc abc abc abdeff";//比较简单的题目，如果是最后一个空格则无法比较
        System.out.println(strlen(str));
    }

    public static void main7(String[] args) {
        String str2 = "abcbbbdef";
        System.out.println(str2.endsWith("f"));//字符串是否以某个字符串结尾
    }

    public static void main6(String[] args) {
        String str2 = "abcbbbdef";
        System.out.println(str2.startsWith("a"));//判断是否是已某个字符串开头
        System.out.println(str2.startsWith("a",2));//从某个下标位置开始判断是否以某个字符串开头
    }

    public static void main5(String[] args) {
        String str2 = "abcbbbdef";
        System.out.println(str2.lastIndexOf("b"));//从后往前走某一个字符串
        System.out.println(str2.lastIndexOf("b",6));//从下表位置从后往前找某一个字符串
    }

    public static void main4(String[] args) {
        String str2 = "abcbbbdef";
        System.out.println(str2.indexOf("b"));//从头到尾找到的第一个字符串
        System.out.println(str2.indexOf("b",3));//从下表开始往后找子串的位置
    }

    public static void main3(String[] args) {
        String str1 = " adddddbbvpv";
        System.out.println(str1.contains("ad"));
        System.out.println(str1.contains("adbbdd1"));//是否包含字符串
    }

    public static void main2(String[] args) {
        String str1 = "Hello";
        String str2 = new String("hello");
        System.out.println(str1.compareTo(str2));  //字符串的大小比较 当str1大于str2返回大于0的值，当str2等于str2返回正数，当str1小于str2时返回负数
        //去找不一样字符，这个字符的大小就是字符串的大小
        //比较的字符串的大小  equals比较的时true false
    }

    public static void main1(String[] args) {
        String str1 = "hello";
        String str2 = new String("Hello");
        System.out.println(str1.equals(str2));//字符串比较实际的内容false,String类的equals
        System.out.println(str1.equalsIgnoreCase(str2));//忽略·大小写
    }

}

